package com.mazaiting.blog.service

import com.mazaiting.blog.dao.UserDao
import com.mazaiting.blog.domain.User
import com.mazaiting.blog.utils.FileUtil
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service

/**
 * 用户相关服务
 */
@Service
class UserService {

    companion object {
        /**
         * 用户登录成功与否标记
         */
        const val USER_VALID = "用户有效"
        const val USER_NAME_LENGTH = "用户名长度小于6"
        const val USER_PWD_LENGTH = "用户密码长度小于6"
        const val USER_NO_EXIST = "用户不存在"
        const val USER_PWD_WRONG = "用户密码不正确"
        const val USER_EXIST = "用户已存在"
        const val USER_ADD_ERROR = "用户注册失败"
        const val USER_NAME_ILLEGAL = "用户名不合法"
    }

    /**
     * 用户数据库Dao
     */
    @Autowired
    lateinit var userDao: UserDao

    /**
     * 登陆
     * @param user 用户信息
     * @return 返回成功与否字符串
     */
    fun login(user: User): String {
        // 检测用户名和密码长度是否符合要求
        val isValid = checkUser(user)
        if (isValid != USER_VALID) return isValid
        // 检测用户名是否存在
        val newUser = selectUserByName(user.username)
        if (null === newUser) return USER_NO_EXIST
        if (newUser.password != user.password) return USER_PWD_WRONG
        return USER_VALID
    }

    /**
     * 注册
     * @param user 用户信息
     * @return 返回成功与否字符串
     */
    fun register(user: User): String {
        val isValid = checkUser(user)
        if (isValid != USER_VALID) return isValid
        // 检测用户名是否存在
        val newUser = selectUserByName(user.username)
        if (null != newUser) return USER_EXIST
        // 保存用户数据
        val num = userDao.addUser(user)
        return if (num > 0) {
            // 判断文件夹是否创建成功
            if (!FileUtil.create(user.username)) return USER_NAME_ILLEGAL
            USER_VALID
        } else USER_ADD_ERROR
    }

    /**
     * 检测用户名是否合法
     * @param user 用户信息
     * @return 返回成功与否字符串
     */
    private fun checkUser(user: User): String {
        // 检测用户名长度
        if (user.username.length < 6) return USER_NAME_LENGTH
        // 检测密码长度
        if (user.password.length < 6) return USER_PWD_LENGTH
        return USER_VALID
    }

    /**
     * 根据用户名查询用户是否存在
     * @param name 用户名
     * @return 返回用户信息，如果为空，则不存在
     */
    fun selectUserByName(name: String): User? {
        return userDao.selectUserByName(name)
    }
}